package com.bestcem.xm.ticket.entity.mongo;

import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

import java.util.List;
import java.util.Set;

import static com.bestcem.xm.ticket.constant.ColumnConstant.TicketConfig.*;

/**
 * 项目工单规则配置表
 * 问卷项目->开启提醒->工单规则列表
 * 一个问卷项目对应多条工单规则配置
 *
 * @author liheng
 * @version v1.0
 * @date 2021/8/16 10:58
 */
@EqualsAndHashCode(callSuper = true)
@Data
@ToString(callSuper = true)
public class TicketConfig extends BaseEntity {

    private static final long serialVersionUID = 9103394347693897371L;
    /**
     * 系统id
     */
    @JsonProperty(value = SYS_ID)
    private String sysId;

    /**
     * 组织id
     */
    @JsonProperty(value = ORG_ID)
    private String orgId;

    /**
     * 用户id
     */
    @JsonProperty(value = USER_ID)
    private String userId;

    /**
     * 问卷id
     */
    @JsonProperty(value = SURVEY_ID)
    private String surveyId;

    /**
     * 工单流程id
     */
    @JsonProperty(value = TICKET_FLOW_IDS)
    private List<String> ticketFlowIds;

    /**
     * @see com.bestcem.xm.ticket.enums.TicketConfigCreateTriggerEnum
     */
    @JsonProperty(value = CREATE_TRIGGER)
    private Integer createTrigger;

    /**
     * 预警id
     */
    @JsonProperty(value = ALERT_ID)
    private String alertId;

    /**
     * 预警规则id
     */
    @JsonProperty(value = ALERT_RULE_IDS)
    private List<String> alertRuleIds;

    /**
     * 预警规则数量，默认为零
     */
    @JsonProperty(value = ALERT_RULE_COUNT)
    private Integer alertRuleCount;

    /**
     * 是否
     */
    @JsonProperty(value = ONLY_HAS_CONTACT)
    private Boolean onlyHasContact;

    /**
     * 处理模板id
     */
    @JsonProperty(value = TICKET_TEMPLATE_ID)
    private String ticketTemplateId;

    /**
     * 详情模板id  (工单2.3加入)
     */
    @JsonProperty(value = DETAIL_TEMPLATE_ID)
    private String detailTemplateId;

    /**
     * 工单通知配置id list
     */
    @JsonProperty(value = TICKET_NOTIFY_CONFIG_IDS)
    private List<String> ticketNotifyConfigIds;

    /**
     * 工单的生成规则列表
     */
    @JsonProperty(value = RULE_LIST)
    private List<String> ruleList;

    /**
     * 状态规则(二次投放相关)list  (TicketRuleId为key,operation为value. 的 map-list)
     * 问卷项目->开启提醒->工单规则->具体工单规则->更多设置
     */
    @JsonProperty(value = STATUS_RULE_LIST)
    private List<JSONObject> statusRuleList;

    /**
     * 工单配置 标题
     */
    @JsonProperty(value = TITLE)
    private String title;

    /**
     * 工单配置状态
     *
     * @see com.bestcem.xm.ticket.enums.TicketConfigStateEnum
     */
    @JsonProperty(value = STATE)
    private Integer state;

    /**
     * 工单的生成规则列表id  (TicketRule 的 id)
     */
    @JsonProperty(value = TICKET_RULE_ID)
    private String ticketRuleId;

    /**
     * 是否需要跟进处理
     */
    @JsonProperty(value = NEED_DEAL)
    private Boolean needDeal;

    /**
     * 至少需要一次提交记录
     */
    @JsonProperty(value = NEED_RECORD)
    private Boolean needRecord;

    /**
     * 是否通知管理员
     */
    @JsonProperty(value = REMIND_ADMIN)
    private Boolean remindAdmin;

    /**
     * 是否通知处理人
     */
    @JsonProperty(value = NOTIFY_HANDLER)
    private Boolean notifyHandler;

    /**
     * 工单详情，显示内容
     * 这个字段表中没有找到，先暂时定义为Object
     */
    @JsonProperty(value = TEMPLATE_DETAIL_FIELDS)
    private List<Ticket.TemplateDetailField> templateDetailFields;

    /**
     * 发送邮件的id
     */
    @JsonProperty(value = SMTP_ID)
    private String smtpId;

    /**
     * 是否sample
     */
    @JsonProperty(value = SAMPLE)
    private Boolean sample;

    /**
     * 联系人id，联系人3.0 p2新增
     */
    private Set<String> memberIds;
}
